unit u_jresau;

interface

type

  r_player = record
    x, y : integer;
    name : string;
  end;

  t_player = Array of r_player;

  c_res_joueur = class
    private
      joueur_tab : t_player;
    public
      procedure get_all_info(var inf : t_player);
      procedure change_pos(last_x, last_y, new_x, new_y : integer);
      procedure add_player(n_x, n_y : integer; name : string);
      procedure del_player_pos(pos_x, pos_y : integer);
      procedure del_player_name(name_ : string);
      constructor create;
  end;

implementation

  constructor c_res_joueur.create;
    begin
      inherited create;
      SetLength(joueur_tab, 0);
    end;

  procedure c_res_joueur.change_pos(last_x, last_y, new_x, new_y : integer);
  var
    i : integer;
    begin
      i := 0;
      if Length(joueur_tab) <> 0 then
        while (i < Length(joueur_tab)) and
        not((joueur_tab[i].x = last_x) and (joueur_tab[i].y = last_y)) do
          i := i + 1;
        if i <> Length(joueur_tab) then
          begin
            joueur_tab[i].x := new_x;
            joueur_tab[i].y := new_y;
          end;
    end;

  procedure c_res_joueur.add_player(n_x: Integer; n_y: Integer; name : string);
  var
    i : integer;
    begin
      i := Length(joueur_tab);
      SetLength(joueur_tab, i + 1);
      joueur_tab[i].x := n_x;
      joueur_tab[i].y := n_y;
      joueur_tab[i].name := name;
    end;

  procedure c_res_joueur.del_player_pos(pos_x: Integer; pos_y: Integer);
  var
    i, j, len : integer;
    begin
      i := 0;
      while (i < Length(joueur_tab)) and
      not((joueur_tab[i].x = pos_x) and (joueur_tab[i].y = pos_y)) do
        i := i + 1;
      if Length(joueur_tab) <> i then
        begin
          for j := i to Length(joueur_tab) - 2 do
            joueur_tab[j] := joueur_tab[j + 1];
          SetLength(joueur_tab, length(joueur_tab) - 1);
        end;
    end;

  procedure c_res_joueur.del_player_name(name_: string);
  var
    i, j : integer;
    begin
      i := 0;
      while (i < Length(joueur_tab)) and (joueur_tab[i].name <> name_) do
        i := i + 1;
      if i <> Length(joueur_tab) then
        begin
          for j := i to Length(joueur_tab) - 2 do
            joueur_tab[j] := joueur_tab[j + 1];
          SetLength(joueur_tab, length(joueur_tab) - 1);
        end;
    end;

  procedure c_res_joueur.get_all_info(var inf : t_player);
    begin
      inf := joueur_tab;
    end;


end.

